package cn.xinfei.xdecision.common.service.component.decisiontable;

import cn.xinfei.xdecision.common.model.common.PageResult;
import cn.xinfei.xdecision.common.model.common.ResponseEntityDto;
import cn.xinfei.xdecision.common.model.common.requestParam.AssemblyRuleCodeReq;
import cn.xinfei.xdecision.common.model.common.requestParam.StatusParam;
import cn.xinfei.xdecision.common.model.component.decisiontable.DecisionTablesVersion;
import cn.xinfei.xdecision.common.model.component.decisiontable.vo.DecisionTablesVersionListVo;
import cn.xinfei.xdecision.common.model.component.decisiontable.vo.DecisionTablesVersionVo;
import cn.xinfei.xdecision.common.utils.enums.enginex.ComponentStatusEnum;
import cn.xinfei.xdecision.common.utils.enums.enginex.ComponentVersionStatusEnum;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * (DecisionTablesVersion)表服务接口
 */
public interface DecisionTablesVersionService extends IService<DecisionTablesVersion> {

    //List<DecisionTablesVersionVo> queryVersionListByDecisionTablesCode(Long decisionTablesId);

    List<String> queryFieldEnByVersionId(Long versionId);

    /**
     * 通过决策树code集合，查询版本集合
     *
     * @param decisionTablesCodes 决策树code
     * @param status              版本状态
     * @return {@link DecisionTablesVersionVo 决策表版本}
     * @see ComponentVersionStatusEnum
     */
    List<DecisionTablesVersionVo> queryVersionByTablesCodes(List<String> decisionTablesCodes, Integer status);
    List<DecisionTablesVersionVo> queryVersionByTablesCodes(String decisionTablesCode, Long versionNo);

    void addVersionList(List<DecisionTablesVersionVo> versionList);

    Long checkAndAddVersion(DecisionTablesVersionVo version);

    void removeVersion(DecisionTablesVersionVo version);

    Boolean saveOrUpdateVersion(DecisionTablesVersionVo version);

    //boolean copyVersion(DecisionTablesVersionVo version);

    boolean updateVersion(DecisionTablesVersionVo version);


    // runner
    DecisionTablesVersionVo queryById(Long id);

    List<DecisionTablesVersionVo> queryByDecisionTableCodeAndVersionNo(String decisionTableCode,Long versionNo);

    /**
     * 清空新建状态的版本信息
     *
     * @see ComponentStatusEnum
     */
    void removeNewVersion(Long versionId);

    /**
     * 通过规则code查看版本列表
     *
     * @param req 规则code
     * @return 版本集合
     */
    ResponseEntityDto<PageResult<List<DecisionTablesVersionListVo>,DecisionTablesVersion>> listByDecisionTableCode(AssemblyRuleCodeReq req);

    /**
     * 锁定规则
     */
    void lockDecisionTables(DecisionTablesVersion decisionTablesVersion);
}
